<?php
/**
 * Провайдер данных результата ответа от Sphinx
 *
 */
class Search_ResultProvider implements Iterator {
	/**
	 * Результат поискового запроса
	 *
	 * @var array
	 */
	private $_data;
	/**
	 * Текущая позиция
	 *
	 * @var int
	 */
	private $_position = 0;
	/**
	 * Где ищем если all то во всех индексах
	 *
	 * @var string
	 */
	private $_where;

	/**
	 * Конструктор
	 *
	 * @param array $result
	 * @param string $where
	 */
	public function __construct($result, $where) {
		$this->_data = $result;
		$this->_where = $where;
	}

	/**
	 * @see интерфейс Iterator
	 *
	 */
	public function current() {
		if ('all' == $this->_where) {
			return new Search_ResultItem($this->_data[$this->_position], $this->_position);
		} elseif (in_array($this->_where, array('music', 'realvideo', 'video', 'tv', 'wap', 'games', 'community', 'film'))) {
			$tmp_arr = is_array($this->_data[$this->_position]['attrs']) ? $this->_data[$this->_position]['attrs'] : array();
			foreach ($tmp_arr as $key => $value) {
				if (strpos($key, '_id')) {
					$where = rtrim($key, '_id');
					$position = Search_Indexes::getInstance()->getIndexNumber($where);
					return new Search_ResultItem($this->_data[$this->_position], $position);
				}
			}
		} else {
			$position = Search_Indexes::getInstance()->getIndexNumber($this->_where);
			return new Search_ResultItem($this->_data[$this->_position], $position);
		}
	}

	/**
	 * @see интерфейс Iterator
	 *
	 */
	public function key() {
		return $this->_position;
	}

	/**
	 * @see интерфейс Iterator
	 *
	 */
	public function next() {
		++$this->_position;
	}

	/**
	 * @see интерфейс Iterator
	 *
	 */
	public function rewind() {
		$this->_position = 0;
	}

	/**
	 * @see интерфейс Iterator
	 *
	 */
	public function valid() {
		return isset($this->_data[$this->_position]);
	}
}